<!DOCTYPE html><html lang="en"><head><meta charset="utf8"></head><body style="width:80%;margin-left:10%;margin-right:10%;"><div class="cl-preview-section"><h2 id="五、applymap遍历">五、applymap遍历</h2>
</div><div class="cl-preview-section"><p>applymap 的用法比较简单，会对 DataFrame 中的每个单元格执行指定函数的操作。<br>
为了演示的方便，生成一个 DataFrame<br>
<img src="https://img1.sycdn.imooc.com/szimg/659523750996164f02570187.png" alt="图片描述"><br>
运行结果：<br>
<img src="https://img1.sycdn.imooc.com/szimg/6595226509fcad2403720111.png" alt="图片描述"><br>
现在想将 DataFrame 中所有的值保留两位小数显示，使 applymap 可以很快达到你想要的目的<br>
<img src="https://img1.sycdn.imooc.com/szimg/659523a20989970003010300.png" alt="图片描述"><br>
运行结果：<br>
<img src="https://img1.sycdn.imooc.com/szimg/659523b3091a644e02660105.png" alt="图片描述"><br>
通过以上的案例，我们看到使用 applymap 时，会调用 lambda 函数，对 DataFrame 进行批量操作，所以在批量对 DataFrame 元素按照一个格式做批量操作可以使用 applymap。<br>
applymap 与 apply 的使用场景是有些区别的，如果对 DataFrame 每个元素不分行或列的操作，建议使用 applymap；如果对 DataFrame 进行行或者列的操作，建议使用 apply</p>
</div><div class="cl-preview-section"><h2 id="六、iteritems遍历">六、iteritems遍历</h2>
</div><div class="cl-preview-section"><p>iteritems 函数取出 df 的每一列，当然，如果 df 比较大。建议不要使用如上方式。<br>
由于 python 版本的变化，在 python3.X 版本中去掉了 iteritems 函数，取而代之的是 items 函数。在python2.X 版本中可以使用 iteritems 函数。<br>
为了演示的方便，生成一个 DataFrame。<br>
<img src="https://img1.sycdn.imooc.com/szimg/659524520911efcb01860157.png" alt="图片描述"><br>
运行结果：<br>
<img src="https://img1.sycdn.imooc.com/szimg/6595245d09acd73e01140075.png" alt="图片描述"><br>
如果按照列获取列的逐个元素，我们可以通过 items 进行获取，代码如下：<br>
<img src="https://img1.sycdn.imooc.com/szimg/65952469093de9f703840191.png" alt="图片描述"><br>
运行结果：<br>
<img src="https://img1.sycdn.imooc.com/szimg/6595247309bb420001570041.png" alt="图片描述"><br>
<img src="https://img1.sycdn.imooc.com/szimg/6595247d099bd3bc01720039.png" alt="图片描述"><br>
通过 items 可以获取 DataFrame 中的列数据，返回结果中第X列的值后有个0，可以忽略，此处并无意义。</p>
</div><div class="cl-preview-section"><h2 id="七、itertuples遍历">七、itertuples遍历</h2>
</div><div class="cl-preview-section"><p>itertuples 函数是将 DataFrame 按行迭代为元组。我们知道元组内的数据是不可修改的，为了数据在使用中不被篡改，一般会使用元组封装数据。在我们实际的 mysql 查询的数据中，就是以元组的格式传输的。<br>
通过代码，我们了解一下这个 itertuples 函数。<br>
首先我们定义一个 DataFrame。<br>
<img src="https://img1.sycdn.imooc.com/szimg/6595250b09173b6501960160.png" alt="图片描述"><br>
运行结果为：<br>
<img src="https://img1.sycdn.imooc.com/szimg/6595245d09acd73e01140075.png" alt="图片描述"><br>
通过 itertuples 获取每行的数据，返回的数据格式为元组，代码如下：<br>
<img src="https://img1.sycdn.imooc.com/szimg/6595252b0926fe1a02170211.png" alt="图片描述"><br>
运行结果：<br>
<img src="https://img1.sycdn.imooc.com/szimg/6595253909d0d6dd02840060.png" alt="图片描述"><br>
我们通过元组中的元素下标获取数据，代码如下：<br>
<img src="https://img1.sycdn.imooc.com/szimg/659525430932992d02240199.png" alt="图片描述"><br>
通过切片[1:]获取 DataFrame 中的数据，运行结果如下：<br>
<img src="https://img1.sycdn.imooc.com/szimg/65952555098936ec01450061.png" alt="图片描述"><br>
然后通过 type 函数，查看结果的数据类型，代码如下：<br>
<img src="https://img1.sycdn.imooc.com/szimg/65952563093ccbce02220217.png" alt="图片描述"><br>
运行结果为：<br>
<img src="https://img1.sycdn.imooc.com/szimg/6595256e0923015501160055.png" alt="图片描述"></p>
</div><div class="cl-preview-section"><h2 id="八、for遍历和map遍历性能对比">八、for遍历和map遍历性能对比</h2>
</div><div class="cl-preview-section"><p>通过代码中插入时间戳，然后获取两个时间戳的差值，进行执行效率对比<br>
我们先看 for 循环的运行耗时，先看代码：<br>
<img src="https://img1.sycdn.imooc.com/szimg/659525970914bbc502840346.png" alt="图片描述"><br>
所用时间为：<br>
<img src="https://img1.sycdn.imooc.com/szimg/659525b009f1882601910125.png" alt="图片描述"><br>
下面我们看 map 遍历的耗时，先看代码：<br>
<img src="https://img1.sycdn.imooc.com/szimg/659525f6098880a302820400.png" alt="图片描述"><br>
所用时间为：<br>
<img src="https://img1.sycdn.imooc.com/szimg/659525ff09beddf102070132.png" alt="图片描述"><br>
通过上面的例子，我们从两方面能够看到，for 遍历和 map 遍历在实际的 pandas 数据运算过程中的耗时，以及代码量都有区别：<br>
●for 用了3行代码，耗时0.002029秒<br>
●map 用了1行代码，耗时0.000984秒<br>
如果在实际工作中，我们处理的数据是百万级别的话，这两种方式的耗时差别会更大</p>
</div></body></html>